package com.example.demo.util.acitiviti;

import java.util.ArrayList;
import java.util.List;


public class Graph {  
    private Node initial;  
  
    public Node getInitial() {  
        return initial;  
    }  
  
    public void setInitial(Node initial) {  
        this.initial = initial;  
    }  
  
    public List<Node> getNodes() {  
        List<Node> nodes = new ArrayList<Node>();  
        visitNode(initial, nodes);  
  
        return nodes;  
    }  
  
    public void visitNode(Node node, List<Node> nodes) {  
        nodes.add(node);  
  
        for (Edge edge : node.getOutgoingEdges()) {  
            Node nextNode = edge.getDest();  
            visitNode(nextNode, nodes);  
        }  
    }  
  
    public List<Edge> getEdges() {  
        List<Edge> edges = new ArrayList<Edge>();  
        visitEdge(initial, edges);  
  
        return edges;  
    }  
  
    public void visitEdge(Node node, List<Edge> edges) {  
        for (Edge edge : node.getOutgoingEdges()) {  
            edges.add(edge);  
  
            Node nextNode = edge.getDest();  
            visitEdge(nextNode, edges);  
        }  
    }  
  
    public Node findById(String id) {  
        for (Node node : this.getNodes()) {  
            if (id.equals(node.getId())) {  
                return node;  
            }  
        }  
  
        return null;  
    }  
}  